/*
 * @Description:
 * @version:
 * @Author: hean
 * @Date: 2019-11-13 20:27:55
 * @LastEditors: hean
 * @LastEditTime: 2020-02-19 23:36:58
 */
const isDev = process.env.ESLINT_ENV === 'develop';
const devOff = (config = 'error') => {
	return isDev ? 'off' : config;
};

module.exports = {
	root: true,
	extends: [
		'plugin:vue/base',
		'eslint-config-alloy/vue',
		'prettier', // Turn off ESLint's formatting rules
	],
	// parser: 'babel-eslint',
	parserOptions: {
		parser: 'babel-eslint',
		sourceType: 'module',
	},
	env: {
		browser: true,
		node: true,
		es6: true,
	},
	plugins: [
		'import', // This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, and prevent issues with misspelling of file paths and import names.All the goodness that the ES2015+ static module syntax intends to provide, marked up in your editor.
		'html', // This ESLint plugin allows linting and fixing inline scripts contained in HTML files.
		'prettier', // add Prettier as an ESLint rule using eslint-plugin-prettier.
	],
	globals: {},
	rules: {
		'prettier/prettier': 'error',

		'no-undef': 'error', // 禁止使用未定义的变量，如代码中需要，请添加注释 /*global var*/
		// 'no-unused-vars': 'error', //区分args好像好些
		'no-unused-vars': [
			// 定义了变量没有使用
			'error',
			{
				vars: 'all',
				args: 'none',
			},
		],
		'no-path-concat': 'error', // 禁止对 __dirname 或 __filename 使用字符串连接 要使用node中的path模块，调用path.join或者path.resolve方法
		// 'array-bracket-spacing': 'error', //数组的括号内的前后禁止有空格 这个属于风格
		'new-parens': 'error', // new 后面的类必须有小括号
		// 代码块嵌套的深度禁止超过 5 层
		'max-depth': ['error', 5],
		// 回调函数嵌套禁止超过 3 层，多了请用 async await 替代
		'max-nested-callbacks': ['error', 3],
		// 函数的参数禁止超过 7 个
		'max-params': ['error', 7],
		'no-restricted-syntax': ['error', 'WithStatement'],
		'no-dupe-keys': 'error',
		'no-dupe-args': 'error',

		// 待讨论
		'no-throw-literal': 'off', // 禁止 throw 字面量，必须 throw 一个 Error 对象
		'prefer-promise-reject-errors': 'off', // Promise 的 reject 中必须传入 Error 对象，而不是字面量
		'array-bracket-spacing': 'error', // 数组的括号内的前后禁止有空格
        
		// 以下推荐关闭
		'no-empty': 'off', // 禁止出现空代码块
		'no-template-curly-in-string': 'off', // 禁止在普通字符串中出现模版字符串里的变量形式，如 'Hello ${name}!'
		radix: 'off', // parseInt 必须传入第二个参数
		'no-new': 'off', // 禁止直接 new 一个类而不赋值
		'func-name-matching': 'off', // 函数赋值给变量的时候，函数名必须与变量名一致
		'jsx-quotes': 'off', // jsx 中的属性必须用双引号'

		// 以下为开发选项
		'no-debugger': devOff(),
		'no-unreachable': devOff(), // 禁止在 return, throw, break 或 continue 之后还有代码
		'no-alert': devOff(), // 禁止使用 alert
	},
};
